// void JPG::disrupt1(LCD &lcd)
// {
//     int nwidth = width/x;
//     int nheight = height/x;
//     cout << "size:" << rgbsize << endl;
//     cout << "nwidth:" << nwidth << endl;
//     cout << "nheight:" << nheight << endl;  
//     cout << "width:" << width << endl;
//     cout << "height:" << height << endl;
//     cout << "x:" << x << endl;

//     char *s1 = new char[rgbsize/(x*x)];
//     cout << "图片数据大小" << endl;
//     cout << "碎片指针分配的内存:" << rgbsize/(x*x) << endl; 
//     //将图片数据拷贝到s1
//     for(int i=0;i<nheight;i++)
//     {
//         //偏移量
//         int moffset = width * bpp/8 * i;
//         int loffset = nwidth * bpp/8 * i;
//         for(int j=0;j<nwidth;j++)
//         {
//             memcpy(s1 + 3*j + loffset + 0, jpgmen + 3*j + moffset + 2, 1);
//             memcpy(s1 + 3*j + loffset + 1, jpgmen + 3*j + moffset + 1, 1);
//             memcpy(s1 + 3*j + loffset + 2, jpgmen + 3*j + moffset + 0, 1);
//         }
//     }
//     cout << "bpp:" << bpp << endl;
//     for(int i=0;i<nheight;i++)
//     {
//         int moffset = lcd.wide * lcd.bpp/8 * i;
//         int loffset = nwidth * bpp/8 * i;
//         for(int j=0;j<nwidth;j++)
//         {
//             memcpy(lcd.men + 4*j + moffset, s1 + 3*j + loffset, 3); 
//         }
//     }
//     delete [] s1;
// }

// void JPG::disrupt2(LCD &lcd)
// {
//     int nwidth = width/x;
//     int nheight = height/x;
//     cout << "size:" << rgbsize << endl;
//     cout << "nwidth:" << nwidth << endl;
//     cout << "nheight:" << nheight << endl;  
//     cout << "width:" << width << endl;
//     cout << "height:" << height << endl;
//     cout << "x:" << x << endl;

//     char *s1 = new char[rgbsize/(x*x)];
//     cout << "图片数据大小" << endl;
//     cout << "碎片指针分配的内存:" << rgbsize/(x*x) << endl;

//     int p = lcd.wide * lcd.bpp/8;
//     int q = width * bpp/8;

//     //将图片数据拷贝到s1
//     for(int i=0;i<nheight;i++)
//     {
//         //偏移量
//         int moffset = width * bpp/8 * i;
//         int loffset = nwidth * bpp/8 * i;
//         for(int j=0;j<nwidth;j++)
//         {
//             memcpy(s1 + 3*j + loffset + 0, jpgmen + q*nheight + 3*j + moffset + 2, 1);
//             memcpy(s1 + 3*j + loffset + 1, jpgmen + q*nheight + 3*j + moffset + 1, 1);
//             memcpy(s1 + 3*j + loffset + 2, jpgmen + q*nheight + 3*j + moffset + 0, 1);
//         }
//     }
//     cout << "bpp:" << bpp << endl;
//     for(int i=0;i<nheight;i++)
//     {
//         int moffset = lcd.wide * lcd.bpp/8 * i;
//         int loffset = nwidth * bpp/8 * i;
//         for(int j=0;j<nwidth;j++)
//         {
//             memcpy(lcd.men + p*nheight + 4*j + moffset, s1 + 3*j + loffset, 3);
//         }
//     }
//     delete [] s1;
// }
// void JPG::disrupt3(LCD &lcd)
// {
//     int nwidth = width/x;
//     int nheight = height/x;
//     cout << "size:" << rgbsize << endl;
//     cout << "nwidth:" << nwidth << endl;
//     cout << "nheight:" << nheight << endl;  
//     cout << "width:" << width << endl;
//     cout << "height:" << height << endl;
//     cout << "x:" << x << endl;

//     char *s1 = new char[rgbsize/(x*x)];
//     cout << "图片数据大小" << endl;
//     cout << "碎片指针分配的内存:" << rgbsize/(x*x) << endl;

//     int p = lcd.wide * lcd.bpp/8;
//     int q = width * bpp/8;

//     //将图片数据拷贝到s1
//     for(int i=0;i<nheight;i++)
//     {
//         //偏移量
//         int moffset = width * bpp/8 * i;
//         int loffset = nwidth * bpp/8 * i;
//         for(int j=0;j<nwidth;j++)
//         {
//             memcpy(s1 + 3*j + loffset + 0, jpgmen + q*nheight*2 + 3*j + moffset + 2, 1);
//             memcpy(s1 + 3*j + loffset + 1, jpgmen + q*nheight*2 + 3*j + moffset + 1, 1);
//             memcpy(s1 + 3*j + loffset + 2, jpgmen + q*nheight*2 + 3*j + moffset + 0, 1);
//         }
//     }
//     cout << "bpp:" << bpp << endl;
//     for(int i=0;i<nheight;i++)
//     {
//         int moffset = lcd.wide * lcd.bpp/8 * i;
//         int loffset = nwidth * bpp/8 * i;
//         for(int j=0;j<nwidth;j++)
//         {
//             memcpy(lcd.men + p*nheight*2 + 4*j + moffset, s1 + 3*j + loffset, 3);
//         }
//     }
//     delete [] s1;
// }
// void JPG::disrupt4(LCD &lcd)
// {
//     int nwidth = width/x;
//     int nheight = height/x;
//     cout << "size:" << rgbsize << endl;
//     cout << "nwidth:" << nwidth << endl;
//     cout << "nheight:" << nheight << endl;  
//     cout << "width:" << width << endl;
//     cout << "height:" << height << endl;
//     cout << "x:" << x << endl;

//     char *s1 = new char[rgbsize/(x*x)];
//     cout << "图片数据大小" << endl;
//     cout << "碎片指针分配的内存:" << rgbsize/(x*x) << endl;

//     int p = lcd.wide * lcd.bpp/8;
//     int q = width * bpp/8;

//     //将图片数据拷贝到s1
//     for(int i=0;i<nheight;i++)
//     {
//         //偏移量
//         int moffset = width * bpp/8 * i;
//         int loffset = nwidth * bpp/8 * i;
//         for(int j=0;j<nwidth;j++)
//         {
//             memcpy(s1 + 3*j + loffset + 0, jpgmen + q*nheight*3 + 3*j + moffset + 2, 1);
//             memcpy(s1 + 3*j + loffset + 1, jpgmen + q*nheight*3 + 3*j + moffset + 1, 1);
//             memcpy(s1 + 3*j + loffset + 2, jpgmen + q*nheight*3 + 3*j + moffset + 0, 1);
//         }
//     }
//     cout << "bpp:" << bpp << endl;
//     for(int i=0;i<nheight;i++)
//     {
//         int moffset = lcd.wide * lcd.bpp/8 * i;
//         int loffset = nwidth * bpp/8 * i;
//         for(int j=0;j<nwidth;j++)
//         {
//             memcpy(lcd.men + p*nheight*3 + 4*j + moffset, s1 + 3*j + loffset, 3);
//         }
//     }
//     delete [] s1;
// }
#include <iostream>  
#include <vector>  
#include <algorithm>  
#include <cstdlib> // 为了使用 std::srand 和 std::rand  
#include <ctime>   // 为了使用 std::time  
  
int main() {  
    // 初始化一个二维vector  
    std::vector<std::vector<int>> vec = {  
        {1, 2, 3},  
        {4, 5, 6},  
        {7, 8, 9}  
    };  
   
    // 设置随机种子（使用当前时间作为种子）  
    std::srand(static_cast<unsigned int>(std::time(0))); 
    // 注意：std::mt19937 g(rd()); 这行代码在低版本编译器中不可用，因为我们替换了 rd()  
  
    // 计算总元素数  
    size_t total_elements = 0;  
    for (size_t i = 0; i < vec.size(); ++i) {  
        total_elements += vec[i].size();  
    }  
  
    // 创建一个一维vector并复制二维数组的元素  
    std::vector<int> flat_vec(total_elements);  
    for (size_t i = 0; i < vec.size(); ++i) {  
        for (size_t j = 0; j < vec[i].size(); ++j) {  
            flat_vec[i * vec[0].size() + j] = vec[i][j]; // 假设所有行长度相同  
            // 或者更安全地：flat_vec[total_elements_so_far++] = vec[i][j];  
            // 其中 total_elements_so_far 在外部声明为 size_t 并初始化为 0，每次循环递增  
        }  
    }  

    // 注意：下面的打乱代码也需要修改，因为 std::shuffle 可能需要 C++11 或更高版本  
    // 如果你没有 C++11，你需要实现自己的打乱算法  
  
    // ...（打乱代码省略，因为需要 C++11 的 std::shuffle）  
    // 设置随机种子为当前时间  
    std::srand(static_cast<unsigned int>(std::time(0)));
    for(int x=0;x<20;x++)
    {
        int p = rand()%7;
        int y = flat_vec[p];
        flat_vec[p] = flat_vec[8];
        flat_vec[8] = y;
    }
    size_t rows = vec.size();  
    size_t cols = vec[0].size();  
    for (size_t i = 0; i < rows; ++i) {  
        for (size_t j = 0; j < cols; ++j) {  
            vec[i][j] = flat_vec[i * cols + j];  
        }  
    }
    // 输出二维vector（为了演示，这里不输出打乱后的结果）  
    for (size_t i = 0; i < vec.size(); ++i) {  
        for (size_t j = 0; j < vec[i].size(); ++j) {  
            std::cout << vec[i][j] << " ";  
        }  
        std::cout << std::endl;  
    }  
  
    return 0;  
}